//
// Created by Rory on 2020/10/23.
//

#ifndef DATA_STRUCTURE_PROGRAMMING_USING_C_STRING_H
#define DATA_STRUCTURE_PROGRAMMING_USING_C_STRING_H

#ifdef MAX_STRING_LEN
    #if MAX_STRING_LEN < 1
        #define MAX_STRING_LEN 100
    #endif
#else
    #define MAX_STRING_LEN 100
#endif

/**
 * 字符串结构体
 * 规定不使用str数组的第一个元素空间，保证字符串从索引1开始
 */
typedef struct {
    char str[MAX_STRING_LEN];
    int size;
}String;
typedef String* StrP;

/**
 * 简单模式匹配
 * @param mainStr 主串
 * @param pattern 模式串
 * @return 主串中模式串所在索引
 */
int SimpleStringMatch(StrP mainStr, StrP pattern);

/**
 * 计算模式串的next数组
 * @param pattern 模式串
 * @param next 要存储的next数组
 * @return
 */
void GetNextArray(StrP pattern,char* next);

/**
 * KMP算法
 * @param mainStr
 * @param pattern
 * @return
 */
int KMP(StrP mainStr, StrP pattern);

#endif //DATA_STRUCTURE_PROGRAMMING_USING_C_STRING_H
